/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package mH3.impl;

import bP.BPPackage;

import bP.impl.BPPackageImpl;

import bRM_LL73.BRM_LL73Package;

import bRM_LL73.impl.BRM_LL73PackageImpl;

import genArchi.GenArchiPackage;

import genArchi.impl.GenArchiPackageImpl;

import mH1.MH1Package;

import mH1.impl.MH1PackageImpl;

import mH2.MH2Package;

import mH2.impl.MH2PackageImpl;

import mH3.MH3Factory;
import mH3.MH3Package;
import mH3.Task;

import mS.MSPackage;

import mS.impl.MSPackageImpl;

import node1.Node1Package;

import node1.impl.Node1PackageImpl;

import node2.Node2Package;
import node2.impl.Node2PackageImpl;
import nodeDependencies.NodeDependenciesPackage;
import nodeDependencies.impl.NodeDependenciesPackageImpl;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;

import org.eclipse.emf.ecore.impl.EPackageImpl;

import pUNB.PUNBPackage;

import pUNB.impl.PUNBPackageImpl;

import result.ResultPackage;

import result.impl.ResultPackageImpl;

import resultsWCRT.ResultsWCRTPackage;

import resultsWCRT.impl.ResultsWCRTPackageImpl;

import spu96a01.Spu96a01Package;

import spu96a01.impl.Spu96a01PackageImpl;

import spu96a02.Spu96a02Package;
import spu96a02.impl.Spu96a02PackageImpl;
import srl90a01.Srl90a01Package;
import srl90a01.impl.Srl90a01PackageImpl;
import srl90a02.Srl90a02Package;
import srl90a02.impl.Srl90a02PackageImpl;
import srl90a03.Srl90a03Package;
import srl90a03.impl.Srl90a03PackageImpl;
import tEDF_LL73.TEDF_LL73Package;

import tEDF_LL73.impl.TEDF_LL73PackageImpl;

import tRM_LL73.TRM_LL73Package;

import tRM_LL73.impl.TRM_LL73PackageImpl;

import tRM_RTNB.TRM_RTNBPackage;

import tRM_RTNB.impl.TRM_RTNBPackageImpl;
import tin92c01.Tin92c01Package;
import tin92c01.impl.Tin92c01PackageImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class MH3PackageImpl extends EPackageImpl implements MH3Package {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass taskEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass mh3EClass = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see mH3.MH3Package#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private MH3PackageImpl() {
		super(eNS_URI, MH3Factory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this
	 * model, and for any others upon which it depends.  Simple
	 * dependencies are satisfied by calling this method on all
	 * dependent packages before doing anything else.  This method drives
	 * initialization for interdependent packages directly, in parallel
	 * with this package, itself.
	 * <p>Of this package and its interdependencies, all packages which
	 * have not yet been registered by their URI values are first created
	 * and registered.  The packages are then initialized in two steps:
	 * meta-model objects for all of the packages are created before any
	 * are initialized, since one package's meta-model objects may refer to
	 * those of another.
	 * <p>Invocation of this method will not affect any packages that have
	 * already been initialized.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static MH3Package init() {
		if (isInited) return (MH3Package)EPackage.Registry.INSTANCE.getEPackage(MH3Package.eNS_URI);

		// Obtain or create and register package
		MH3PackageImpl theMH3Package = (MH3PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof MH3PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new MH3PackageImpl());

		isInited = true;

		// Obtain or create and register interdependencies
		BPPackageImpl theBPPackage = (BPPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(BPPackage.eNS_URI) instanceof BPPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(BPPackage.eNS_URI) : BPPackage.eINSTANCE);
		BRM_LL73PackageImpl theBRM_LL73Package = (BRM_LL73PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(BRM_LL73Package.eNS_URI) instanceof BRM_LL73PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(BRM_LL73Package.eNS_URI) : BRM_LL73Package.eINSTANCE);
		GenArchiPackageImpl theGenArchiPackage = (GenArchiPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(GenArchiPackage.eNS_URI) instanceof GenArchiPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(GenArchiPackage.eNS_URI) : GenArchiPackage.eINSTANCE);
		MH1PackageImpl theMH1Package = (MH1PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(MH1Package.eNS_URI) instanceof MH1PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(MH1Package.eNS_URI) : MH1Package.eINSTANCE);
		MH2PackageImpl theMH2Package = (MH2PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(MH2Package.eNS_URI) instanceof MH2PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(MH2Package.eNS_URI) : MH2Package.eINSTANCE);
		MSPackageImpl theMSPackage = (MSPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(MSPackage.eNS_URI) instanceof MSPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(MSPackage.eNS_URI) : MSPackage.eINSTANCE);
		Node1PackageImpl theNode1Package = (Node1PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Node1Package.eNS_URI) instanceof Node1PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Node1Package.eNS_URI) : Node1Package.eINSTANCE);
		Node2PackageImpl theNode2Package = (Node2PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Node2Package.eNS_URI) instanceof Node2PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Node2Package.eNS_URI) : Node2Package.eINSTANCE);
		NodeDependenciesPackageImpl theNodeDependenciesPackage = (NodeDependenciesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NodeDependenciesPackage.eNS_URI) instanceof NodeDependenciesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NodeDependenciesPackage.eNS_URI) : NodeDependenciesPackage.eINSTANCE);
		PUNBPackageImpl thePUNBPackage = (PUNBPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PUNBPackage.eNS_URI) instanceof PUNBPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PUNBPackage.eNS_URI) : PUNBPackage.eINSTANCE);
		ResultPackageImpl theResultPackage = (ResultPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ResultPackage.eNS_URI) instanceof ResultPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ResultPackage.eNS_URI) : ResultPackage.eINSTANCE);
		ResultsWCRTPackageImpl theResultsWCRTPackage = (ResultsWCRTPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ResultsWCRTPackage.eNS_URI) instanceof ResultsWCRTPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ResultsWCRTPackage.eNS_URI) : ResultsWCRTPackage.eINSTANCE);
		Spu96a01PackageImpl theSpu96a01Package = (Spu96a01PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Spu96a01Package.eNS_URI) instanceof Spu96a01PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Spu96a01Package.eNS_URI) : Spu96a01Package.eINSTANCE);
		Spu96a02PackageImpl theSpu96a02Package = (Spu96a02PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Spu96a02Package.eNS_URI) instanceof Spu96a02PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Spu96a02Package.eNS_URI) : Spu96a02Package.eINSTANCE);
		Srl90a01PackageImpl theSrl90a01Package = (Srl90a01PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Srl90a01Package.eNS_URI) instanceof Srl90a01PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Srl90a01Package.eNS_URI) : Srl90a01Package.eINSTANCE);
		Srl90a02PackageImpl theSrl90a02Package = (Srl90a02PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Srl90a02Package.eNS_URI) instanceof Srl90a02PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Srl90a02Package.eNS_URI) : Srl90a02Package.eINSTANCE);
		Srl90a03PackageImpl theSrl90a03Package = (Srl90a03PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Srl90a03Package.eNS_URI) instanceof Srl90a03PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Srl90a03Package.eNS_URI) : Srl90a03Package.eINSTANCE);
		TEDF_LL73PackageImpl theTEDF_LL73Package = (TEDF_LL73PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TEDF_LL73Package.eNS_URI) instanceof TEDF_LL73PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TEDF_LL73Package.eNS_URI) : TEDF_LL73Package.eINSTANCE);
		Tin92c01PackageImpl theTin92c01Package = (Tin92c01PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(Tin92c01Package.eNS_URI) instanceof Tin92c01PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(Tin92c01Package.eNS_URI) : Tin92c01Package.eINSTANCE);
		TRM_LL73PackageImpl theTRM_LL73Package = (TRM_LL73PackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TRM_LL73Package.eNS_URI) instanceof TRM_LL73PackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TRM_LL73Package.eNS_URI) : TRM_LL73Package.eINSTANCE);
		TRM_RTNBPackageImpl theTRM_RTNBPackage = (TRM_RTNBPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TRM_RTNBPackage.eNS_URI) instanceof TRM_RTNBPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TRM_RTNBPackage.eNS_URI) : TRM_RTNBPackage.eINSTANCE);

		// Create package meta-data objects
		theMH3Package.createPackageContents();
		theBPPackage.createPackageContents();
		theBRM_LL73Package.createPackageContents();
		theGenArchiPackage.createPackageContents();
		theMH1Package.createPackageContents();
		theMH2Package.createPackageContents();
		theMSPackage.createPackageContents();
		theNode1Package.createPackageContents();
		theNode2Package.createPackageContents();
		theNodeDependenciesPackage.createPackageContents();
		thePUNBPackage.createPackageContents();
		theResultPackage.createPackageContents();
		theResultsWCRTPackage.createPackageContents();
		theSpu96a01Package.createPackageContents();
		theSpu96a02Package.createPackageContents();
		theSrl90a01Package.createPackageContents();
		theSrl90a02Package.createPackageContents();
		theSrl90a03Package.createPackageContents();
		theTEDF_LL73Package.createPackageContents();
		theTin92c01Package.createPackageContents();
		theTRM_LL73Package.createPackageContents();
		theTRM_RTNBPackage.createPackageContents();

		// Initialize created meta-data
		theMH3Package.initializePackageContents();
		theBPPackage.initializePackageContents();
		theBRM_LL73Package.initializePackageContents();
		theGenArchiPackage.initializePackageContents();
		theMH1Package.initializePackageContents();
		theMH2Package.initializePackageContents();
		theMSPackage.initializePackageContents();
		theNode1Package.initializePackageContents();
		theNode2Package.initializePackageContents();
		theNodeDependenciesPackage.initializePackageContents();
		thePUNBPackage.initializePackageContents();
		theResultPackage.initializePackageContents();
		theResultsWCRTPackage.initializePackageContents();
		theSpu96a01Package.initializePackageContents();
		theSpu96a02Package.initializePackageContents();
		theSrl90a01Package.initializePackageContents();
		theSrl90a02Package.initializePackageContents();
		theSrl90a03Package.initializePackageContents();
		theTEDF_LL73Package.initializePackageContents();
		theTin92c01Package.initializePackageContents();
		theTRM_LL73Package.initializePackageContents();
		theTRM_RTNBPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theMH3Package.freeze();

		return theMH3Package;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTask() {
		return taskEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTask_Wcet() {
		return (EAttribute)taskEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTask_Period() {
		return (EAttribute)taskEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTask_Blocking() {
		return (EAttribute)taskEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getTask_Parent() {
		return (EReference)taskEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getTask_Id() {
		return (EAttribute)taskEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getMH3() {
		return mh3EClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getMH3_Tasks() {
		return (EReference)mh3EClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getMH3_Scheduler() {
		return (EAttribute)mh3EClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public MH3Factory getMH3Factory() {
		return (MH3Factory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		taskEClass = createEClass(TASK);
		createEAttribute(taskEClass, TASK__WCET);
		createEAttribute(taskEClass, TASK__PERIOD);
		createEAttribute(taskEClass, TASK__BLOCKING);
		createEReference(taskEClass, TASK__PARENT);
		createEAttribute(taskEClass, TASK__ID);

		mh3EClass = createEClass(MH3);
		createEReference(mh3EClass, MH3__TASKS);
		createEAttribute(mh3EClass, MH3__SCHEDULER);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Obtain other dependent packages
		Node1Package theNode1Package = (Node1Package)EPackage.Registry.INSTANCE.getEPackage(Node1Package.eNS_URI);
		MSPackage theMSPackage = (MSPackage)EPackage.Registry.INSTANCE.getEPackage(MSPackage.eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		taskEClass.getESuperTypes().add(theNode1Package.getAbstractTask());
		mh3EClass.getESuperTypes().add(theNode1Package.getNode1());

		// Initialize classes and features; add operations and parameters
		initEClass(taskEClass, Task.class, "Task", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getTask_Wcet(), ecorePackage.getEInt(), "wcet", null, 1, 1, Task.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getTask_Period(), ecorePackage.getEInt(), "period", null, 1, 1, Task.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getTask_Blocking(), ecorePackage.getEInt(), "blocking", null, 1, 1, Task.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getTask_Parent(), this.getMH3(), this.getMH3_Tasks(), "parent", null, 1, 1, Task.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getTask_Id(), ecorePackage.getEString(), "id", null, 1, 1, Task.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(mh3EClass, mH3.MH3.class, "MH3", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getMH3_Tasks(), this.getTask(), this.getTask_Parent(), "tasks", null, 0, -1, mH3.MH3.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getMH3_Scheduler(), theMSPackage.getScheduler(), "scheduler", null, 1, 1, mH3.MH3.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		addEOperation(mh3EClass, null, "compute", 1, 1, IS_UNIQUE, IS_ORDERED);

		// Create resource
		createResource(eNS_URI);

		// Create annotations
		// Comments
		createCommentsAnnotations();
	}

	/**
	 * Initializes the annotations for <b>Comments</b>.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected void createCommentsAnnotations() {
		String source = "Comments";		
		addAnnotation
		  (this, 
		   source, 
		   new String[] {
			 "abstract", "This node represents a model of assumptions with blocking terms. These terms can be compute for shared resources, release jitters. ",
			 "previous", null,
			 "next", null,
			 "bibtex", null
		   });
	}

} //MH3PackageImpl
